#include "Wave.h"
#include <ctime>
//namespace td{
//namespace inimigo{

Wave::Wave(int quantidade, tipoInimigo tipo, ISceneManager *cena, int tempoParaAtivarProximoInimigo, vector<vector<Tile*>> mapaDeTiles): estaAtiva(false), ultimoAtivado(0){

	this->tempoParaAtivarProximoInimigo = tempoParaAtivarProximoInimigo;
	inimigos = new vector<Inimigo*>;
	temporizador = clock();
	//this->tempoAtual = clock();
	for(int i = 0; i < mapaDeTiles.size(); i++){
		for(int j = 0; j < mapaDeTiles[i].size(); j++){

			if(mapaDeTiles[i][j]->getIdTile() == BASE_INIMIGO){

				posBaseInimigo = mapaDeTiles[i][j];
			}

			if(mapaDeTiles[i][j]->getIdTile() == BASE_JOGADOR){

				posBaseJogador = mapaDeTiles[i][j];
			}
		}
	}

	//Add inimigos do tipo voador na wave
	if(tipo == RAPIDO){

		for(int i = 0; i < quantidade; i++){

			Inimigo *tmp = new Inimigo("media/Modelos/bobafett/tris.MD2", "media/Modelos/bobafett/prototype_Fett_i.pcx", true, cena,
											  20, 16, 5, 10);
			tmp->getModelo()->setEscala(0.2f, 0.2f, 0.2f);
			tmp->getModelo()->setVelocidadeAnimacao(20);
			tmp->getModelo()->setFrameLoop(160,179);

			this->inimigos->push_back(tmp);

			this->inimigos->at(inimigos->size()-1)->getModelo()->setPosicao(
					posBaseInimigo->getModeloTile()->getPosicaoX(),
					posBaseInimigo->getModeloTile()->getPosicaoY(),
					posBaseInimigo->getModeloTile()->getPosicaoZ());
		}
	}

	//Add inimigos do tipo voador na wave
	if(tipo == VOADOR){

		for(int i = 0; i < quantidade; i++){

			Inimigo *tmp = new Inimigo("media/Modelos/nave.3ds", 0, true, cena,
												  50, 17, 5, 30);

			this->inimigos->push_back(tmp);

			this->inimigos->at(inimigos->size()-1)->getModelo()->setPosicao(
					posBaseInimigo->getModeloTile()->getPosicaoX(),
					posBaseInimigo->getModeloTile()->getPosicaoY(),
					posBaseInimigo->getModeloTile()->getPosicaoZ());
		}
	}

	//Add inimigos do tipo voador na wave
	if(tipo == CHEFE){

		for(int i = 0; i < quantidade; i++){

			Inimigo *tmp = new Inimigo("media/Modelos/fred/tris.MD2", "media/Modelos/fred/freddret.pcx", true, cena,
											  100, 19, 5, 10);
			tmp->getModelo()->setEscala(0.7f, 0.7f, 0.7f);
			tmp->getModelo()->setVelocidadeAnimacao(15);
			tmp->getModelo()->setFrameLoop(160,189);

			this->inimigos->push_back(tmp);

			this->inimigos->at(inimigos->size()-1)->getModelo()->setPosicao(
					posBaseInimigo->getModeloTile()->getPosicaoX(),
					posBaseInimigo->getModeloTile()->getPosicaoY(),
					posBaseInimigo->getModeloTile()->getPosicaoZ());
		}
	}
}

Wave::~Wave(void){

}

Tile* Wave::getposBaseInimigo(){
	return posBaseInimigo;
}

Tile* Wave::getposBaseJogador(){
	return posBaseJogador;
}

void Wave::ativarInimigo(){

	if(((clock() - temporizador ) / CLOCKS_PER_SEC) >= tempoParaAtivarProximoInimigo){

		temporizador = clock();

		if(ultimoAtivado < inimigos->size()){

			inimigos->at(ultimoAtivado)->ativarInimigo();
			ultimoAtivado= (ultimoAtivado +1);
		}
	}
}

vector<Inimigo*>* Wave::getInimigos(){
	return inimigos;
}

bool Wave::estaAtivada(void){
	return estaAtiva;
}


void Wave::ativarWave(){
	estaAtiva = true;
	getInimigos()->at(0)->ativarInimigo();
}


//} //end namespace inimigo
//}  // end namespace td